<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  
  <title>《LeetCode题解攻略》 - 草稿目录 | lucifer的网络博客</title>
  
  <meta name="keywords" content="前端 leetocde 数据结构 算法 lucifer 大前端 性能优化 前端架构 前端工程化">
  
  
  <meta name="description" content="lucifer的个人博客，用来记录LeeCode刷题过程和心得，以及构建大前端知识体系">
  

  
  <link rel="alternate" href="/blog/atom.xml" title="lucifer的网络博客">
  

  <meta name="HandheldFriendly" content="True">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <!-- meta -->
  

  <!-- link -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.10.1/css/all.min.css">
  

  
  <link rel="shortcut icon" type="image/x-icon" href="https://avatars0.githubusercontent.com/u/12479470?s=400&u=442571e44cbd0b67e3503e9551d4445c78f593f8&v=4">
  

  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.9.9/css/style.css">
  

  <script>
    function setLoadingBarProgress(num) {
      document.getElementById('loading-bar').style.width=num+"%";
    }
  </script>

  
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-FVTTYT432Q"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-FVTTYT432Q');
    </script>
  
  
    <!-- ba -->
    <script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?576ec211e11a69128667eb8c11a6cffe";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
    </script>
  
</head>

<body>
  
  
  <div class="cover-wrapper">
    <cover class='cover post half'>
      
        
  <h1 class='title'>lucifer</h1>


  <div class="m_search">
    <form name="searchform" class="form u-search-form">
      <input type="text" class="input u-search-input" placeholder="" />
      <i class="icon fas fa-search fa-fw"></i>
    </form>
  </div>

<div class='menu navgation'>
  <ul class='h-list'>
    
      
        <li>
          <a class="nav home" href="/blog/"
            
            
            id="blog">
            <i class='fas fa-home fa-fw'></i>&nbsp;主页
          </a>
        </li>
      
        <li>
          <a class="nav home" href="http://leetcode-solution.cn/"
            
            
            id="http:leetcode-solution.cn">
            <i class='fas fa-laptop-code fa-fw'></i>&nbsp;官网
          </a>
        </li>
      
        <li>
          <a class="nav home" href="/blog/friends/"
            
            
            id="blogfriends">
            <i class='fas fa-link fa-fw'></i>&nbsp;友链
          </a>
        </li>
      
        <li>
          <a class="nav home" href="/blog/about/"
            
            
            id="blogabout">
            <i class='fas fa-id-card-alt fa-fw'></i>&nbsp;联系我
          </a>
        </li>
      
    
  </ul>
</div>

      
    </cover>
    <header class="l_header pure">
  <div id="loading-bar-wrapper">
    <div id="loading-bar" class="pure"></div>
  </div>

	<div class='wrapper'>
		<div class="nav-main container container--flex">
      <a class="logo flat-box" href='/blog/' >
        
          lucifer的网络博客
        
      </a>
			<div class='menu navgation'>
				<ul class='h-list'>
          
  					
  						<li>
								<a class="nav flat-box" href="/blog/"
                  
                  
                  id="blog">
									<i class='fas fa-grin fa-fw'></i>&nbsp;回到主页
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/blog/categories/"
                  
                  
                  id="blogcategories">
									<i class='fas fa-folder-open fa-fw'></i>&nbsp;分类
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/blog/tags/"
                  
                  
                  id="blogtags">
									<i class='fas fa-hashtag fa-fw'></i>&nbsp;标签
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/blog/archives/"
                  
                  
                  id="blogarchives">
									<i class='fas fa-archive fa-fw'></i>&nbsp;归档
								</a>
							</li>
      			
      		
				</ul>
			</div>

			
				<div class="m_search">
					<form name="searchform" class="form u-search-form">
						<input type="text" class="input u-search-input" placeholder="搜索" />
						<i class="icon fas fa-search fa-fw"></i>
					</form>
				</div>
			
			<ul class='switcher h-list'>
				
					<li class='s-search'><a class="fas fa-search fa-fw" href='javascript:void(0)'></a></li>
				
				<li class='s-menu'><a class="fas fa-bars fa-fw" href='javascript:void(0)'></a></li>
			</ul>
		</div>

		<div class='nav-sub container container--flex'>
			<a class="logo flat-box"></a>
			<ul class='switcher h-list'>
				<li class='s-comment'><a class="flat-btn fas fa-comments fa-fw" href='javascript:void(0)'></a></li>
        
          <li class='s-toc'><a class="flat-btn fas fa-list fa-fw" href='javascript:void(0)'></a></li>
        
			</ul>
		</div>
	</div>
</header>
	<aside class="menu-phone">
    <header>
		<nav class="menu navgation">
      <ul>
        
          
            <li>
							<a class="nav flat-box" href="/blog/"
                
                
                id="blog">
								<i class='fas fa-clock fa-fw'></i>&nbsp;近期文章
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/archives/"
                
                
                id="blogarchives">
								<i class='fas fa-archive fa-fw'></i>&nbsp;文章归档
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/about/"
                
                
                id="blogabout">
								<i class='fas fa-info-circle fa-fw'></i>&nbsp;关于小站
							</a>
            </li>
          
       
      </ul>
		</nav>
    </header>
	</aside>
<script>setLoadingBarProgress(40);</script>

  </div>


  <div id="container" class="l_body">
    <div class='body-wrapper'>
      <div class='l_main'>
  

  <article id="post" class="post white-box article-type-post" itemscope itemprop="blogPost">
    


  <section class='meta'>
    
    
    <div class="meta" id="header-meta">
      
        
  
    <h1 class="title">
      <a href="/blog/2019/12/11/draft/">
        《LeetCode题解攻略》 - 草稿目录
      </a>
    </h1>
  


      
      <div class='new-meta-box'>
        
          
        
          
            
  <div class='new-meta-item author'>
    
      <a href="https://lucifer.ren/blog" rel="nofollow">
        
          <img src="https://avatars0.githubusercontent.com/u/12479470?s=400&u=442571e44cbd0b67e3503e9551d4445c78f593f8&v=4">
        
        <p>lucifer</p>
      </a>
    
  </div>


          
        
          
            <div class="new-meta-item date">
  <a class='notlink'>
    <i class="fas fa-calendar-alt" aria-hidden="true"></i>
    <p>2019-12-11</p>
  </a>
</div>

          
        
          
            
  
  <div class='new-meta-item category'>
    <a href='/blog/categories/书/算法/' rel="nofollow">
      <i class="fas fa-folder-open" aria-hidden="true"></i>
      <p>书&nbsp;/&nbsp;算法</p>
    </a>
  </div>


          
        
          
            
  
    <div class="new-meta-item browse busuanzi">
      <a class='notlink'>
        <i class="fas fa-eye" aria-hidden="true"></i>
        <p>
          <span id="busuanzi_value_page_pv">
            <i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i>
          </span>
        </p>
      </a>
    </div>
  


          
        
          
            

          
        
          
            
  
    <div style="margin-right: 10px;">
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-keyboard"></i>
          <span class="post-meta-item-text">  字数统计: </span>
          <span class="post-count">7.4k字</span>
        </span>
      </span>
      &nbsp; | &nbsp;
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-hourglass-half"></i>
          <span class="post-meta-item-text">  阅读时长≈</span>
          <span class="post-count">26分</span>
        </span>
      </span>
    </div>
  

          
        
      </div>
      
        <hr>
      
    </div>
  </section>


    <section class="article typo">
      <div class="article-entry" itemprop="articleBody">
        <p>这个我为自己的新书写的一个目录，计划在一星期左右定下来大体目录，然后投入完善，希望大家多提意见，你的意见很可能会影响到这本书的内容，期待你以特别的方式参与进来，此致敬礼。</p>
<a id="more"></a>

<h2 id="1-准备知识"><a href="#1-准备知识" class="headerlink" title="1. 准备知识"></a>1. 准备知识</h2><h3 id="1-1-学习这本书之前需要什么基础"><a href="#1-1-学习这本书之前需要什么基础" class="headerlink" title="1.1 学习这本书之前需要什么基础"></a>1.1 学习这本书之前需要什么基础</h3><p>很多人觉得算法很难，需要很多公式以及数学知识。 其实并不是这样的，除非你是做算法岗位，否则并不会要求你对数学，几何学，概率学有多深的造诣，其实更看重的是分析问题，解决问题的能力和基础编码能力。</p>
<p>但是我们不排除LeetCode有一些数学题目，我们会在后面的章节中讲到，但是说实话LeetCode的数学题目不会涉及很难的数学知识。而且通常我们也可以通过变通的方式解决，比如LeetCode有一道水壶倒水的问题，以下是题目描述：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">给你一个装满水的 8 升满壶和两个分别是 5 升、3 升的空壶，请想个优雅的办法，使得其中一个水壶恰好装 4 升水，每一步的操作只能是倒空或倒满。</span><br></pre></td></tr></table></figure>

<p>这道题我们可以用GCD（最大公约数）解决，如果你不知道这个数学知识点也没问题。 我们可以通过BFS来解决，其实学习算法尤其是刷LeetCode只需要我们掌握简单的数学知识，高中的数学知识通常来说就足够了。</p>
<p>另外一个大家需要掌握的数学知识是关于后面要讲的复杂度分析，这里需要一点简单的数学知识，不过不要担心，非常简单，不会有高等数学的内容。</p>
<p>学习本书最好你对一种编程语言比较熟悉，出于读者的受众群体和代码简洁性，我选取了Python作为本书的主要编程语言，如果大家对Python不熟悉也没有关系，我会尽量少使用语言特有的语法糖，从而减少大家对于语言层面的认知负担。 另外Python被誉为最容易入门的语言之一也是实至名归，大家可以放心。 退一步讲，语言不应该成为我们学习算法的障碍，不是么？那让我们一起进入LeetCode的世界吧！</p>
<h3 id="1-2-基础数据结构和算法"><a href="#1-2-基础数据结构和算法" class="headerlink" title="1.2 基础数据结构和算法"></a>1.2 基础数据结构和算法</h3><p>在真正的刷题之前，我们一定要先打好基础，学好基本的数据结构和算法，然后以练代学进行提升和消化。</p>
<p>从广义上来说，数据结构其实就是数据的存储结构，算法就是操作数据的方法。而平时以及本书所探讨的其实是更为狭义角度的数据结构和算法。其实指的是某些非常典型的数据结构和算法，比如数组，链表，栈，队列，树，图等数据结构，以及二分法，动态规划，快速排序等经典的算法。</p>
<p>数据结构是为算法所服务的，而算法是要建立在某一种或者几种数据结构之上才可以发挥作用，这两个是相辅相成的关系。某些算法一定要建立在某种数据结构之上才行，相信你读完这本书会对这句话产生更为深刻的印象。</p>
<p>本书要讲的内容就是在LeetCode上反复出现的算法，经过进一步提炼，抽取近百道题目在这里进行讲解，帮助大家理清整体结构，从而高效率地刷题。</p>
<p>我这里总结了 7 个常见的数据结构和 7 个常见的算法以及 5 个常见的算法思想。</p>
<p>7 个数据结构分别是： <code>数组，栈，队列，链表，二叉树，散列表，图</code></p>
<p>7 个算法分别是：<code>二分法，递归，回溯法，排序，双指针，滑动窗口，并查集</code></p>
<p>5 个算法思想分别是：<code>分治，贪心，深度优先遍历，广度优先遍历，动态规划</code></p>
<p>只有掌握了这些基础的数据结构和算法，更为复杂的算法才能得心应手，刷题才会事半功倍。而LeetCode的题目虽然不断出新，但是最终用到的算法永远是那几个，很多题目都是穿着新衣服的老面孔了。大家学好这些基础套路之后会更加明白这个道理。</p>
<h3 id="1-3-如何刷LeetCode"><a href="#1-3-如何刷LeetCode" class="headerlink" title="1.3 如何刷LeetCode"></a>1.3 如何刷LeetCode</h3><h4 id="Leetcode网站使用方法"><a href="#Leetcode网站使用方法" class="headerlink" title="Leetcode网站使用方法"></a>Leetcode网站使用方法</h4><p>LeetCode官网收录了许多互联网公司的算法题目，一度被称为刷题神器，今天我们就来介绍下如何使用LeetCode网站，以下所讲述的内容都是以力扣中国为例。</p>
<p>LeetCode目前有1000多道题目，并且一直持续更新，其中有一些是带锁的，需要会员才能查看。 最上面标签栏的Problems，给出了四个分类：Algorithms、Database、Shell和Concurrency，分别表示算法题、数据库题、Shell和并发题，第一个就是我们所需要刷的算法题，并发是2019年才添加的新的模块。</p>
<p>点开Algorithms后，我们可以看到一列题目的列表，每个题目都有一个序号，后面的接受率（Acceptance）表示提交的正确率，Difficulty表示难易程度。这里有个小技巧，衡量一道题目难不难除了看难度之外，还可以看下接受率，接受率越低代表题目越难，这个指标有时候比难度更靠谱。</p>
<p>LeetCode按难易程度分成了三个级别，分别是Easy、Medium和Hard。</p>
<ul>
<li>Easy 通常不需要太多思考和也不会有复杂的细节，比较特别适合新手或者拿来热身。</li>
<li>Medium级别就会有些难度，一般都会涉及到经典的算法，需要一定的思考。</li>
<li>Hard级别是最难的，有些时候是算法本身的难度，有些时候特别需要你考虑到各种细节。</li>
</ul>
<p>你可以对题目进行筛选和排序。</p>
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8ueyinaxij30oy0c6wet.jpg" alt></p>
<p>如果我们只想要找某一类型的题，可以通过Tags或Company来筛选。</p>
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8uez7f9tsj30aj0pggm3.jpg" alt></p>
<p>另外我们在做某一题时，觉得还想再做一个类似的，可以点击题目描述下方Show Similar Problems或Tags来找到相似的问题。</p>
<p>每个题目都有各自的Discuss区域。在这里，许多人都把自己的思路和代码放到了上面，你可以发贴提问，也可以回复别人，里面大神很多，题解质量都很高，如果实在没有思路或者想看下有没有更好的思路可以来逛一下。通常来说我建议你优先看Post或者投票最多的。</p>
<p>点开某一个题目，会跳转到具体题目详情页面，你可以在右侧的代码区切换选择自己需要的编程语言。</p>
<p>代码编写完了之后，不要急着提交，先可以测试运行下（Run Code），你可以多写几个测试用力跑一下，没有问题再提交，要知道比赛的时候错误提交要加时间的。 我们可以点开More Details查看详细运行结果信息。</p>
<p>每道题旁边的My Submissions可以找到自己的对于该题的提交情况，这里可以看到自己过去所有的提交，点Accepted 或 Wrong Answer就可以查看自己过去提交的代码情况，包括代码是什么，跑的时间以及时间分布图等。</p>
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8uf5vjtkuj30yj0hfjrm.jpg" alt></p>
<p>以上就是LeetCode的主要功能，希望通过这一节内容能让你对LeetCode网站有所了解，从而更快地进行刷题。</p>
<h4 id="应该怎么刷LeetCode"><a href="#应该怎么刷LeetCode" class="headerlink" title="应该怎么刷LeetCode"></a>应该怎么刷LeetCode</h4><p>我本人从开始准备算法以来刷了很多题，自己成长了很多，从刷题菜鸡，到现在对刷题套路，题型有了自己的理解，感受还是蛮多的。我本人不是算法高手，算是勤能补拙类型。不过经过几个月的学习和练习，不仅面试变得更加得心应手，而且在工作中写更容易写出干净优雅，性能好的代码。</p>
<p>对于我来说，刷题的过程其实就是学习数据结构和算法的过程， 不仅仅是为了刷题而刷题，这样你才能感受到刷题的乐趣。刷题至少要刷两遍，理想情况是根据自己的遗忘曲线刷多次，这个我后面也会讲到。</p>
<ol>
<li>第一遍按tag刷</li>
</ol>
<p>建议第一遍刷的时候可以先快速按照tag过一遍，快速感受一下常见数据结构和算法的套路，这样自己有一个感性的认识。</p>
<ol start="2">
<li>第二遍一题多解，多题同解</li>
</ol>
<p>第二遍我们就不能像第一遍那样了，这个阶段我们需要多个角度思考问题，尽量做到一题多解，多题同解。我们需要对问题的本质做一些深度的理解，将来碰到类似的问题我们才能够触类旁通。</p>
<p>但是很多人做了几遍，碰到新题还是没有任何头绪，这是一个常见的问题，这怎么办呢？ </p>
<p>总结并记忆是学习以及刷题过程中非常重要的一环， 不管哪个阶段，我们都需要做对应的总结，这样将来我们再回过头看的时候，才能够快读拾起来。</p>
<p>anki就是根据<a href="./ibinhouse.md">艾宾浩斯记忆曲线</a>开发的一个软件，它是一个使记忆变得更容易的学习软件。支持深度自定义。 对于我本人而言，我在anki里面写了很多LeetCode题目和套路的Card，然后anki会自动帮我安排复习时间，大大减少我的认知负担，提高了我的复习效率。大家可以在书后的附录中下载anki卡片。</p>
<p>目前已更新卡片一览（仅列举正面）</p>
<ul>
<li>二分法解决问题的关键点是什么，相关问题有哪些?</li>
<li>如何用栈的特点来简化操作， 涉及到的题目有哪些？</li>
<li>双指针问题的思路以及相关题目有哪些？</li>
<li>滑动窗口问题的思路以及相关题目有哪些？</li>
<li>回溯法解题的思路以及相关题目有哪些？</li>
<li>数论解决问题的关键点是什么，相关问题有哪些?</li>
<li>位运算解决问题的关键点是什么，相关问题有哪些?</li>
</ul>
<p>大家刷了很多题之后，就会发现来来回回，题目就那么几种类型，因此掌握已有题目类型是多么重要。那样LeetCode出题的老师，很多也是在原有的题目基础上做了适当扩展（比如two-sum,two-sum2,three-sum, four-sum等等）或者改造（使得不那么一下子看出问题的本质，比如猴子吃香蕉问题）。</p>
<p>其中算法，主要是以下几种：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">基础技巧：分治、二分、贪心</span><br><span class="line">排序算法：快速排序、归并排序、计数排序</span><br><span class="line">搜索算法：回溯、递归、深度优先遍历，广度优先遍历，二叉搜索树等</span><br><span class="line">图论：最短路径、最小生成树</span><br><span class="line">动态规划：背包问题、最长子序列</span><br></pre></td></tr></table></figure>

<p>数据结构，主要有如下几种：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">数组与链表：单 / 双向链表</span><br><span class="line">栈与队列</span><br><span class="line">哈希表</span><br><span class="line">堆：最大堆 ／ 最小堆</span><br><span class="line">树与图：最近公共祖先、并查集</span><br><span class="line">字符串：前缀树（字典树） ／ 后缀树</span><br></pre></td></tr></table></figure>

<p>做到了以上几点，我们还需要坚持。这个其实是最难的，不管做什么事情，坚持都是最重要也是最难的。</p>
<p>为了督促自己，同时帮助大家成长，我在群里举办《每日一题》活动，每日一题是在交流群（包括微信和qq）里进行的一种活动，大家一起 解一道题，这样讨论问题更加集中，会得到更多的反馈。而且 这些题目可以被记录下来，日后会进行筛选添加到仓库的题解模块， 感兴趣的可以到书后的附录部分进群交流。</p>
<h3 id="1-4-复杂度分析"><a href="#1-4-复杂度分析" class="headerlink" title="1.4 复杂度分析"></a>1.4 复杂度分析</h3><p>想学算法，首先要学的第一件事就是如何判断一个算法的好坏。 好的程序有很多的评判标准，包括但不限于可读性，扩展性性能等。 这里我们来看其中一种 - 性能。 坏的程序可能性能也很好，但是好的程序通常性能都比较好。那么如何分析一个算法的性能好坏呢？这就是我们要讲的复杂度分析，所有的数据结构教程都会把这个放在前面来讲，不仅仅是因为他们是基础，更因为他们真的非常重要。学会了复杂度分析，你才能够对你的算法进行分析，从而帮助你写出复杂度更优的算法。</p>
<p>那么怎么样才能衡量一个算法代码的执行效率呢？</p>
<p>如下是一个从1加到n的一个算法，这个算法用了一层循环来完成，并且借助了一个变量res来完成。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">sum</span><span class="params">(n)</span>:</span></span><br><span class="line">  res = <span class="number">0</span></span><br><span class="line">  <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, n + <span class="number">1</span>):</span><br><span class="line">    res += i</span><br><span class="line">  <span class="keyword">return</span> res</span><br></pre></td></tr></table></figure>

<p>我们将这个方法从更微观的角度来进行分析，上述代码会执行n次循环体的内容，每一次执行都是常数时间，我们不妨假设执行的时间是x。我们假设赋值语句<code>res = 0</code>和<code>return res</code>的时间分别为y和z   那么执行的总时间我们约等于 n * x + y + z, 我们<code>粗略</code>将x，y和z都看成一样的，我们得出总时间为 (n + 2) * x 换句话说算法的时间和数据的规模成正比。</p>
<p>实际上，这更是一种叫做大O表示法的基本思想, 它是一种描述算法性能的记法，这种描述和编译系统、机器结构、处理器的快慢等因素无关。 这种描述的参数是n，表示数据的规模。 这里的O表示量级（order），比如说“二分查找是$O(logN)$的”，也就是说它需要“通过 logn量级的操作去查找一个规模为n的数据结构（通常是数组）”。这种渐进地估计对算法的理论分析和大致比较是非常有价值，可以很快地对算法进行一个大致地估算。例如，一个拥有较小常数项的 $O(N^2)$算法在规模n较小的情况下可能比一个高常数项的$O(N)$算法运行得更快。但是随着n足够大以后，具有较慢上升函数的算法必然工作得更快，因此在采用大O标记复杂度的时候，可以忽略系数。</p>
<p>我们还应该区分算法的最好情况，最坏情况和平均情况，但是这不在本书的讨论范畴，本书的所有复杂度均指的是平均复杂度。</p>
<p>那么如何分析一个算法的复杂度呢？下面我们介绍几种常见时间复杂度，几乎所有的算法的复杂度都是以下中的一种</p>
<p>我对时间复杂度进行了一个小的分类。</p>
<ul>
<li>第一类是常数阶。</li>
</ul>
<p>一般情况下，只要算法中不存在循环语句、递归语句，即使有成千上万行的代码，其时间复杂度也是Ο(1)。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">cnt = <span class="number">1</span></span><br><span class="line">l = <span class="number">0</span></span><br><span class="line">r = len(list) - <span class="number">1</span></span><br><span class="line"><span class="comment"># 不管这种代码有多少行，都是常数复杂度，即$O(1)$,因此系数是被忽略的。</span></span><br></pre></td></tr></table></figure>

<ul>
<li>第二类是 n,n^2,n^3 …</li>
</ul>
<p>一个简单的方法是<code>关注循环执行次数最多的那一段代码就好了</code>，这段执行次数最多的代码执行次数的n的量级，就是整个算法的时间复杂度。即如果是一层N的循环，那么时间复杂度就是$O(N)$, 如果嵌套了两层N的循环，那么时间复杂度就是$O(N^2)$，依次类推。 </p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">twoSum</span><span class="params">(self, nums: List[int], target: int)</span> -&gt; List[int]:</span></span><br><span class="line">        n = len(nums)</span><br><span class="line">        mapper = &#123;&#125;</span><br><span class="line">        <span class="keyword">for</span> i <span class="keyword">in</span> range(n):</span><br><span class="line">            <span class="keyword">if</span> (target - nums[i] <span class="keyword">in</span> mapper):</span><br><span class="line">                <span class="keyword">return</span> [mapper[target - nums[i]], i]</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                mapper[nums[i]] = i</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> []</span><br></pre></td></tr></table></figure>

<p>如上代码，我们进行了一层的循环，那么时间复杂度就是$O(N^2)$</p>
<ul>
<li>第三类是对数阶。 logn  nlogn</li>
</ul>
<p>这同样是一种非常常见的复杂度，多见于二分查找和一些排序算法。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">numRescueBoats</span><span class="params">(self, people: List[int], limit: int)</span> -&gt; int:</span></span><br><span class="line">        res = <span class="number">0</span></span><br><span class="line">        l = <span class="number">0</span></span><br><span class="line">        r = len(people) - <span class="number">1</span></span><br><span class="line">        people.sort()</span><br><span class="line"></span><br><span class="line">        <span class="keyword">while</span> l &lt; r:</span><br><span class="line">            total = people[l] + people[r]</span><br><span class="line">            <span class="keyword">if</span> total &gt; limit:</span><br><span class="line">                r -= <span class="number">1</span></span><br><span class="line">                res += <span class="number">1</span></span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                r -= <span class="number">1</span></span><br><span class="line">                l += <span class="number">1</span></span><br><span class="line">                res += <span class="number">1</span></span><br><span class="line">        <span class="keyword">if</span> (l == r):</span><br><span class="line">            <span class="keyword">return</span> res + <span class="number">1</span></span><br><span class="line">        <span class="keyword">return</span> res</span><br></pre></td></tr></table></figure>

<p>上面的代码是一个典型的二分查找，其时间复杂度是logn</p>
<ul>
<li>第四类是指数阶 2^n</li>
</ul>
<p>指数的增长已经非常恐怖了，一个典型的例子是fabnicca数列的递归实现版本。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fibonacci</span><span class="params">(n)</span>:</span></span><br><span class="line">    <span class="keyword">if</span> n &lt; <span class="number">2</span>:</span><br><span class="line">      <span class="keyword">return</span> n</span><br><span class="line">    <span class="keyword">return</span> fibonacci(n<span class="number">-1</span>) + fibonacci(n<span class="number">-2</span>)</span><br></pre></td></tr></table></figure>

<p>如果你把上述的计算过程看成树的一个节点，那么整个计算过程就像是一颗很大的树。这棵树有很多的重复计算，大致算下来的话，是2^n。</p>
<ul>
<li>第五类是对数阶 n！</li>
</ul>
<p>我们知道n个不相同的数字的全排列有n!个。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">factorrail</span><span class="params">(n)</span>:</span></span><br><span class="line">  <span class="keyword">if</span> n == <span class="number">1</span>:</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line">  <span class="keyword">return</span> n * factorrail(n - <span class="number">1</span>)</span><br></pre></td></tr></table></figure>

<p>很明显上面的代码就是n!</p>
<p>下面给出上面列举的几种常见的时间复杂度的趋势图对比，大家直观感受一下。</p>
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8o458x4cvj311e0u00tk.jpg" alt><br>（各种复杂度的渐进趋势对比）</p>
<p>从算法可以分析出时间复杂度，相反题目的时间复杂度要求，我们甚至可以猜测出可能用到的算法，比如算法要求logn，那么就有可能是二分法。</p>
<p>空间复杂度分析比时间复杂度分析要简单地多,常见的空间复杂度有$O(1)$、$O(N)$、$O(N^2)$、$O(logN)$、$O(logN)$、$O(N!)$这样的对数阶复杂度基本不会有，关于空间复杂度这里不做更多介绍了。</p>
<h4 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h4><p>时间复杂度是算法的基石，学习它对于我们学习后面的章节有很大的帮助。 我们引入了大O表示法来衡量算法的好坏。接着通过若干实例了解了各种时间复杂度，其实对于复杂度，掌握上面提到的几种常见的就已经够应付绝大多数场合了。</p>
<p>通过上面的学习，相信你对评估一个算法的时间复杂度有了初步的了解。随着学习的深入，相信你会对复杂度分析有着更为深入的理解。</p>
<h2 id="2-数学之美"><a href="#2-数学之美" class="headerlink" title="2. 数学之美"></a>2. 数学之美</h2><p>LeetCode中有很多数学问题，截止到本书出版，LeetCode中有数学标签的题目一共是159，在所有标签的分类中排名第3。这些题目中有些是包着数学外衣的伪数学问题，还有一些是真正数学问题。这需要大家有着极强的分辨能力。不要被数学两个字吓住了，本章不会讲非常复杂的数学概念和公式，实际上你只需要一些高中数学知识即可。</p>
<p>除非是面试算法岗位，笔试和面试题才会涉及到一些比较复杂度的数学知识，比如微积分，线性代数，概率论，信息论等。</p>
<p>虽然有的题目可以用数学公式轻松解决，但是这并不意味你需要对数学有很深的造诣。举例来说，LeetCode 69.实现开方，就是一道可以使用纯数学方法 - <code>牛顿迭代法</code>来解决的一道题，但是你完全可以使用二分法解决，尽管效率远远不及<code>牛顿迭代法</code>，实际上现在的计算器计算开方也不是二分法计算的。但是这通常是一个加分项，如果你可以通过别的方法解决，也未尝不可。</p>
<p>很多题目一眼看上去就是个数学问题，如果你尝试使用数学的角度没有什么思路或者解不出来的时候，可以考虑换最常规，最符合直觉的做法，当然做之前要估算一下数据范围和时间，不要写完才发现超时。</p>
<p>有些题目只是涉及到一些数学名词，并且会在题目中详细地进行解释。 比如关于质数性质，阶乘性质的题目，还有一些造轮子题目，比如实现Pow等。还有一些干脆定义一个数学概念，让你去做。比如开心数，回文数，丑数等。</p>
<p>我们这章主要讲解纯数学问题，需要用到一些数学的性质类的题目，这或许是大家更想要看的。</p>
<h3 id="2-1-N-SUM-题目"><a href="#2-1-N-SUM-题目" class="headerlink" title="2.1 N-SUM 题目"></a>2.1 N-SUM 题目</h3><p>LeetCode上有很多经典的系列问题，今天我们就来看一下N-SUM系列问题。</p>
<h3 id="2-2-连续整数和"><a href="#2-2-连续整数和" class="headerlink" title="2.2 连续整数和"></a>2.2 连续整数和</h3><p>这是一个非常经典，被各种收录的一个题目，这道题好在虽然简单，但是却可以从多个纬度进行解决，非常适合用来查考一个人的真实水平，一些比较大的公司也会用它来进行算法面试的第一道题。</p>
<h3 id="2-3-最大数"><a href="#2-3-最大数" class="headerlink" title="2.3 最大数"></a>2.3 最大数</h3><h3 id="2-4-分数到小数"><a href="#2-4-分数到小数" class="headerlink" title="2.4 分数到小数"></a>2.4 分数到小数</h3><h3 id="2-5-最大整除子集"><a href="#2-5-最大整除子集" class="headerlink" title="2.5 最大整除子集"></a>2.5 最大整除子集</h3><h3 id="2-6-质数排列"><a href="#2-6-质数排列" class="headerlink" title="2.6 质数排列"></a>2.6 质数排列</h3><ol>
<li>质数</li>
</ol>
<ol start="2">
<li>全排列</li>
</ol>
<h3 id="2-8-快乐数"><a href="#2-8-快乐数" class="headerlink" title="2.8 快乐数"></a>2.8 快乐数</h3><blockquote>
<p>这类题目是给定一个定义（情景），让你实现算法找出满足特定条件的数字</p>
</blockquote>
<h2 id="3-回文的艺术"><a href="#3-回文的艺术" class="headerlink" title="3. 回文的艺术"></a>3. 回文的艺术</h2><p>回文是很多教材中被提到的一个题目，通常是用来学习栈的一个练习题，LeetCode中有关回文的题目也是蛮多的，单从数据结构上来看就有字符串，数字和链表。今天我们就结合几个LeetCode题目来攻克它。</p>
<h3 id="3-1-回文字符串"><a href="#3-1-回文字符串" class="headerlink" title="3.1 回文字符串"></a>3.1 回文字符串</h3><h3 id="3-2-回文链表"><a href="#3-2-回文链表" class="headerlink" title="3.2 回文链表"></a>3.2 回文链表</h3><h3 id="3-3-回文数字"><a href="#3-3-回文数字" class="headerlink" title="3.3 回文数字"></a>3.3 回文数字</h3><h3 id="3-4-回文总数"><a href="#3-4-回文总数" class="headerlink" title="3.4 回文总数"></a>3.4 回文总数</h3><h2 id="4-游戏之乐"><a href="#4-游戏之乐" class="headerlink" title="4. 游戏之乐"></a>4. 游戏之乐</h2><p>我很喜欢玩游戏，实际上很多游戏背后都是有很多算法存在的，我们通过LeetCode上一些关于游戏的题目来一窥究竟吧，虽然这里的题目和实际游戏用到的算法难度差很多，但是这里的基本思想是一样的。</p>
<h3 id="4-1-生命游戏"><a href="#4-1-生命游戏" class="headerlink" title="4.1 生命游戏"></a>4.1 生命游戏</h3><h3 id="4-2-报数"><a href="#4-2-报数" class="headerlink" title="4.2 报数"></a>4.2 报数</h3><h3 id="4-3-数独游戏"><a href="#4-3-数独游戏" class="headerlink" title="4.3 数独游戏"></a>4.3 数独游戏</h3><h2 id="5-BFS-amp-DFS"><a href="#5-BFS-amp-DFS" class="headerlink" title="5. BFS &amp; DFS"></a>5. BFS &amp; DFS</h2><p>这是LeetCode后期新增的一个板块，题目还比较少。</p>
<h2 id="6-二分法"><a href="#6-二分法" class="headerlink" title="6. 二分法"></a>6. 二分法</h2><p>二分法真的是一个非常普遍的算法了，更严格的说其实是一种思想，如果把二改成N其实就是一种分治思想。LeetCode关于二分法的题目实在太多了，我们挑选几个代表性的来感受一下，LeetCode到底是如何考察我们二分法的。</p>
<h3 id="6-1-你真的了解二分法么？"><a href="#6-1-你真的了解二分法么？" class="headerlink" title="6.1 你真的了解二分法么？"></a>6.1 你真的了解二分法么？</h3><h3 id="6-2-一些显然的二分"><a href="#6-2-一些显然的二分" class="headerlink" title="6.2 一些显然的二分"></a>6.2 一些显然的二分</h3><h3 id="6-3-隐藏的二分法"><a href="#6-3-隐藏的二分法" class="headerlink" title="6.3 隐藏的二分法"></a>6.3 隐藏的二分法</h3><p>二进制和二分法？</p>
<blockquote>
<p>744 吃香蕉 循环数组 数学开方  等等</p>
</blockquote>
<h3 id="6-4-寻找峰值"><a href="#6-4-寻找峰值" class="headerlink" title="6.4 寻找峰值"></a>6.4 寻找峰值</h3><h2 id="7-神奇的比特"><a href="#7-神奇的比特" class="headerlink" title="7. 神奇的比特"></a>7. 神奇的比特</h2><p>前菜： 如何将一个IP地址用一个字节存储，支持序列化和反序列化操作。</p>
<p>计算机是用过二进制来表示信息的，有时候我们从二进制思考问题，会发现一个全新的世界。</p>
<h3 id="7-1-那些特立独行的数字"><a href="#7-1-那些特立独行的数字" class="headerlink" title="7.1 那些特立独行的数字"></a>7.1 那些特立独行的数字</h3><h3 id="7-2-桶中摸黑白球"><a href="#7-2-桶中摸黑白球" class="headerlink" title="7.2 桶中摸黑白球"></a>7.2 桶中摸黑白球</h3><h3 id="7-3-实现加法"><a href="#7-3-实现加法" class="headerlink" title="7.3 实现加法"></a>7.3 实现加法</h3><h3 id="7-4-二进制-1-的个数"><a href="#7-4-二进制-1-的个数" class="headerlink" title="7.4 二进制 1 的个数"></a>7.4 二进制 1 的个数</h3><h3 id="7-5-悲惨的老鼠"><a href="#7-5-悲惨的老鼠" class="headerlink" title="7.5 悲惨的老鼠"></a>7.5 悲惨的老鼠</h3><h2 id="8-设计题"><a href="#8-设计题" class="headerlink" title="8. 设计题"></a>8. 设计题</h2><p>有时候我们面对的不是一个算法题，而是一个设计题目，这种题目比较开放，让你自己设计数据结构和算法。这比限定数据结构和算法更能考察一个人综合运用知识的能力，是一个经常被拿来进行面试的一类题目。</p>
<h3 id="8-1-设计-LRU"><a href="#8-1-设计-LRU" class="headerlink" title="8.1 设计 LRU"></a>8.1 设计 LRU</h3><h3 id="8-2-设计-LFU"><a href="#8-2-设计-LFU" class="headerlink" title="8.2 设计 LFU"></a>8.2 设计 LFU</h3><h3 id="8-3-最小栈"><a href="#8-3-最小栈" class="headerlink" title="8.3 最小栈"></a>8.3 最小栈</h3><h3 id="8-4-队列实现栈"><a href="#8-4-队列实现栈" class="headerlink" title="8.4 队列实现栈"></a>8.4 队列实现栈</h3><h3 id="8-5-设计-Trie-树"><a href="#8-5-设计-Trie-树" class="headerlink" title="8.5 设计 Trie 树"></a>8.5 设计 Trie 树</h3><h2 id="9-双指针"><a href="#9-双指针" class="headerlink" title="9. 双指针"></a>9. 双指针</h2><p>双指针的题目真的非常多，可以看出这个是一个重要重要的知识点。在实际使用过程中，我将双指针问题分为两种，一种是头尾双指针，一种是快慢双指针。</p>
<h3 id="9-1-头尾指针"><a href="#9-1-头尾指针" class="headerlink" title="9.1 头尾指针"></a>9.1 头尾指针</h3><h4 id="9-1-1-盛水问题"><a href="#9-1-1-盛水问题" class="headerlink" title="9.1.1 盛水问题"></a>9.1.1 盛水问题</h4><h4 id="9-1-2-两数相加-2"><a href="#9-1-2-两数相加-2" class="headerlink" title="9.1.2 两数相加 2"></a>9.1.2 两数相加 2</h4><h3 id="9-2-快慢指针"><a href="#9-2-快慢指针" class="headerlink" title="9.2 快慢指针"></a>9.2 快慢指针</h3><h4 id="9-2-1-删除有序数组的重复元素"><a href="#9-2-1-删除有序数组的重复元素" class="headerlink" title="9.2.1 删除有序数组的重复元素"></a>9.2.1 删除有序数组的重复元素</h4><h4 id="9-2-2-链表中的快慢指针"><a href="#9-2-2-链表中的快慢指针" class="headerlink" title="9.2.2 链表中的快慢指针"></a>9.2.2 链表中的快慢指针</h4><h2 id="10-查表与动态规划"><a href="#10-查表与动态规划" class="headerlink" title="10. 查表与动态规划"></a>10. 查表与动态规划</h2><p>如果说递归是从问题的结果倒推，直到问题的规模缩小到寻常。 那么动态规划就是从寻常入手， 逐步扩大规模到最优子结构。 这句话需要一定的时间来消化, 如果不理解，可以过一段时间再来看。</p>
<p>递归的解决问题非常符合人的直觉，代码写起来比较简单。但是我们通过分析（可以尝试画一个递归树），可以看出递归在缩小问题规模的同时可能会 重复计算。 279.perfect-squares 中 我通过递归的方式来解决这个问题，同时内部维护了一个缓存 来存储计算过的运算，那么我们可以减少很多运算。 这其实和动态规划有着异曲同工的地方。</p>
<h3 id="10-1-爬楼梯"><a href="#10-1-爬楼梯" class="headerlink" title="10.1 爬楼梯"></a>10.1 爬楼梯</h3><h3 id="10-2-聪明的盗贼"><a href="#10-2-聪明的盗贼" class="headerlink" title="10.2 聪明的盗贼"></a>10.2 聪明的盗贼</h3><p>六（七）个版本，带你一步步进化，走向极致</p>
<h3 id="10-3-不同路径"><a href="#10-3-不同路径" class="headerlink" title="10.3 不同路径"></a>10.3 不同路径</h3><h3 id="10-4-硬币找零"><a href="#10-4-硬币找零" class="headerlink" title="10.4 硬币找零"></a>10.4 硬币找零</h3><h3 id="10-5-最短编辑距离"><a href="#10-5-最短编辑距离" class="headerlink" title="10.5 最短编辑距离"></a>10.5 最短编辑距离</h3><h2 id="11-滑动窗口"><a href="#11-滑动窗口" class="headerlink" title="11. 滑动窗口"></a>11. 滑动窗口</h2><p>你可能听过TCP的滑动窗口，这里要讲的滑动窗口其实思想是一样的，这里要讲的滑动窗口通常被用在处理连续数组或者字符的问题上。</p>
<h3 id="最长连续不重复子串"><a href="#最长连续不重复子串" class="headerlink" title="最长连续不重复子串"></a>最长连续不重复子串</h3><h3 id="最短子数组之和"><a href="#最短子数组之和" class="headerlink" title="最短子数组之和"></a>最短子数组之和</h3><h3 id="滑动窗口最大值"><a href="#滑动窗口最大值" class="headerlink" title="滑动窗口最大值"></a>滑动窗口最大值</h3><h2 id="12-博弈"><a href="#12-博弈" class="headerlink" title="12. 博弈"></a>12. 博弈</h2><p>博弈，词语解释是局戏、围棋、赌博。 现代数学中有博弈论，亦名“对策论”、“赛局理论”，属应用数学的一个分支， 表示在多决策主体之间行为具有相互作用时，各主体根据所掌握信息及对自身能力的认知，做出有利于自己的决策的一种行为理论。</p>
<p>这类问题通常没那么直接和好下手，需要你进行一定的推演才能发现问题的本质。</p>
<h3 id="12-1-alec"><a href="#12-1-alec" class="headerlink" title="12.1 alec"></a>12.1 alec</h3><h3 id="12-2-Nim"><a href="#12-2-Nim" class="headerlink" title="12.2 Nim"></a>12.2 Nim</h3><h3 id="12-3-486-预测赢家"><a href="#12-3-486-预测赢家" class="headerlink" title="12.3 486. 预测赢家"></a>12.3 486. 预测赢家</h3><h2 id="13-股票系列"><a href="#13-股票系列" class="headerlink" title="13. 股票系列"></a>13. 股票系列</h2><p>LeetCode上有很多经典的系列问题，今天我们就来看一下这个股票系列问题。</p>
<h3 id="13-1-股票买卖的最佳时机-1"><a href="#13-1-股票买卖的最佳时机-1" class="headerlink" title="13.1 股票买卖的最佳时机 1"></a>13.1 股票买卖的最佳时机 1</h3><h3 id="13-2-股票买卖的最佳时机-2"><a href="#13-2-股票买卖的最佳时机-2" class="headerlink" title="13.2 股票买卖的最佳时机 2"></a>13.2 股票买卖的最佳时机 2</h3><h3 id="13-3-股票买卖的最佳时机-3"><a href="#13-3-股票买卖的最佳时机-3" class="headerlink" title="13.3 股票买卖的最佳时机 3"></a>13.3 股票买卖的最佳时机 3</h3><h3 id="13-4-股票买卖的最佳时机-4"><a href="#13-4-股票买卖的最佳时机-4" class="headerlink" title="13.4 股票买卖的最佳时机 4"></a>13.4 股票买卖的最佳时机 4</h3><h2 id="14-分治法"><a href="#14-分治法" class="headerlink" title="14. 分治法"></a>14. 分治法</h2><p>分治是一种非常重要的算法思想，而不是一个算法。和具体算法不同，算法思想在任何数据结构下都可以使用。</p>
<h3 id="14-1-合并-K-个排序链表"><a href="#14-1-合并-K-个排序链表" class="headerlink" title="14.1 合并 K 个排序链表"></a>14.1 合并 K 个排序链表</h3><h3 id="14-2-数组中的第-K-个最大元素"><a href="#14-2-数组中的第-K-个最大元素" class="headerlink" title="14.2 数组中的第 K 个最大元素"></a>14.2 数组中的第 K 个最大元素</h3><h3 id="14-3-搜索二维矩阵"><a href="#14-3-搜索二维矩阵" class="headerlink" title="14.3 搜索二维矩阵"></a>14.3 搜索二维矩阵</h3><h2 id="15-贪心法"><a href="#15-贪心法" class="headerlink" title="15. 贪心法"></a>15. 贪心法</h2><p>贪心或许是最难的一种算法思想了。</p>
<h3 id="15-1-跳跃游戏"><a href="#15-1-跳跃游戏" class="headerlink" title="15.1 跳跃游戏"></a>15.1 跳跃游戏</h3><h3 id="15-2-任务调度器"><a href="#15-2-任务调度器" class="headerlink" title="15.2 任务调度器"></a>15.2 任务调度器</h3><h2 id="16-回溯"><a href="#16-回溯" class="headerlink" title="16. 回溯"></a>16. 回溯</h2><p>这是一种非常暴力的搜索算法，优点是书写简单有固定模板，且适用范围很广。</p>
<h3 id="16-1-求组合数-1"><a href="#16-1-求组合数-1" class="headerlink" title="16.1 求组合数 1"></a>16.1 求组合数 1</h3><h3 id="16-2-求组合数-2"><a href="#16-2-求组合数-2" class="headerlink" title="16.2 求组合数 2"></a>16.2 求组合数 2</h3><h3 id="16-3-求所有子集"><a href="#16-3-求所有子集" class="headerlink" title="16.3 求所有子集"></a>16.3 求所有子集</h3><h3 id="16-4-全排列"><a href="#16-4-全排列" class="headerlink" title="16.4 全排列"></a>16.4 全排列</h3><h3 id="16-5-海岛问题"><a href="#16-5-海岛问题" class="headerlink" title="16.5 海岛问题"></a>16.5 海岛问题</h3><h2 id="17-一些有趣的题目"><a href="#17-一些有趣的题目" class="headerlink" title="17. 一些有趣的题目"></a>17. 一些有趣的题目</h2><p>这里让我们来看一下LeetCode上那些惊人的算法。</p>
<h3 id="17-1-求众数"><a href="#17-1-求众数" class="headerlink" title="17.1 求众数"></a>17.1 求众数</h3><h3 id="17-2-手撕排序"><a href="#17-2-手撕排序" class="headerlink" title="17.2 手撕排序"></a>17.2 手撕排序</h3><h3 id="17-3-星期几"><a href="#17-3-星期几" class="headerlink" title="17.3 星期几"></a>17.3 星期几</h3><h3 id="17-4-量筒问题"><a href="#17-4-量筒问题" class="headerlink" title="17.4 量筒问题"></a>17.4 量筒问题</h3><h3 id="17-5-实现开方"><a href="#17-5-实现开方" class="headerlink" title="17.5 实现开方"></a>17.5 实现开方</h3><h3 id="17-6-4的次方"><a href="#17-6-4的次方" class="headerlink" title="17.6 4的次方"></a>17.6 4的次方</h3><h2 id="18-一些通用解题模板"><a href="#18-一些通用解题模板" class="headerlink" title="18. 一些通用解题模板"></a>18. 一些通用解题模板</h2><p>不仅是平时做工程项目，刷题的过程也非常讲究风格一致，如果有一些非常优秀的模板可以直接拿来用，一方便减少做题时间和出错的可能，另一方面做题风格一致有利于自己回顾。 如果你是在面试，相信一定也会为你加分不少。</p>
<h3 id="18-1-二分法"><a href="#18-1-二分法" class="headerlink" title="18.1 二分法"></a>18.1 二分法</h3><h3 id="18-2-回溯法"><a href="#18-2-回溯法" class="headerlink" title="18.2 回溯法"></a>18.2 回溯法</h3><h3 id="18-3-递归"><a href="#18-3-递归" class="headerlink" title="18.3 递归"></a>18.3 递归</h3><h3 id="18-4-并查集"><a href="#18-4-并查集" class="headerlink" title="18.4 并查集"></a>18.4 并查集</h3><ul>
<li>朋友圈</li>
<li>计算小岛数2</li>
</ul>
<h2 id="19-融会贯通"><a href="#19-融会贯通" class="headerlink" title="19. 融会贯通"></a>19. 融会贯通</h2><p>这里我们要把本书降到的知识进行融会贯通，纵向上我们不满足于一种解法，我们尝试使用多种解法去解决。 横向上我们需要去总结哪些题目和这道题目类似。</p>
<p>这通常被用在第二遍刷LeetCode的过程中。</p>
<h3 id="19-1-最大子序列和问题"><a href="#19-1-最大子序列和问题" class="headerlink" title="19.1 最大子序列和问题"></a>19.1 最大子序列和问题</h3><h3 id="19-2-循环移位问题"><a href="#19-2-循环移位问题" class="headerlink" title="19.2 循环移位问题"></a>19.2 循环移位问题</h3><h3 id="19-3-k-问题"><a href="#19-3-k-问题" class="headerlink" title="19.3 k 问题"></a>19.3 k 问题</h3><h2 id="20-解题技巧-amp-面试技巧"><a href="#20-解题技巧-amp-面试技巧" class="headerlink" title="20. 解题技巧&amp;面试技巧"></a>20. 解题技巧&amp;面试技巧</h2><p>在水平知识一样的情况下，如果能够LeetCode上效率更好？如何面试的时候加分，这是本章我们要探讨的主要内容。</p>
<ul>
<li>一定要看限制条件，很多时候限制条件起到了提示的作用，并且可以帮助你过滤错误答案</li>
</ul>
<h2 id="21-参考"><a href="#21-参考" class="headerlink" title="21. 参考"></a>21. 参考</h2>
      </div>
      
        <br>
        


  <section class='meta' id="footer-meta">
    <div class='new-meta-box'>
      
        
          <div class="new-meta-item date" itemprop="dateUpdated" datetime="2019-12-11T12:35:19+08:00">
  <a class='notlink'>
    <i class="fas fa-clock" aria-hidden="true"></i>
    <p>更新于 2019年12月11日</p>
  </a>
</div>

        
      
        
          
  
  <div class="new-meta-item meta-tags"><a class="tag" href="/blog/tags/数据结构/" rel="nofollow"><i class="fas fa-tag" aria-hidden="true"></i><p>数据结构</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/blog/tags/算法/" rel="nofollow"><i class="fas fa-tag" aria-hidden="true"></i><p>算法</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/blog/tags/LeetCode/" rel="nofollow"><i class="fas fa-tag" aria-hidden="true"></i><p>LeetCode</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/blog/tags/书/" rel="nofollow"><i class="fas fa-tag" aria-hidden="true"></i><p>书</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/blog/tags/草稿/" rel="nofollow"><i class="fas fa-tag" aria-hidden="true"></i><p>草稿</p></a></div>


        
      
        
          
  <div class="new-meta-item share -mob-share-list">
  <div class="-mob-share-list share-body">
    
      
        <a class='qrcode' rel="external nofollow noopener noreferrer" href=''>
        
          <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qrcode.png">
        
        </a>
      
    
      
        <a class="-mob-share-qq" title="QQ好友" rel="external nofollow noopener noreferrer"
          
          href="http://connect.qq.com/widget/shareqq/index.html?url=https://lucifer.ren/blog/2019/12/11/draft/&title=《LeetCode题解攻略》 - 草稿目录 | lucifer的网络博客&pics=https://avatars0.githubusercontent.com/u/12479470?s=400&u=442571e44cbd0b67e3503e9551d4445c78f593f8&v=4&summary=这个我为自己的新书写的一个目录，计划在一星期左右定下来大体目录，然后投入完善，希望大家多提意见，你的意见很可能会影响到这本书的内容，期待你以特别的方式参与进来，此致敬礼。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qq.png">
          
        </a>
      
    
      
        <a class="-mob-share-qzone" title="QQ空间" rel="external nofollow noopener noreferrer"
          
          href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://lucifer.ren/blog/2019/12/11/draft/&title=《LeetCode题解攻略》 - 草稿目录 | lucifer的网络博客&pics=https://avatars0.githubusercontent.com/u/12479470?s=400&u=442571e44cbd0b67e3503e9551d4445c78f593f8&v=4&summary=这个我为自己的新书写的一个目录，计划在一星期左右定下来大体目录，然后投入完善，希望大家多提意见，你的意见很可能会影响到这本书的内容，期待你以特别的方式参与进来，此致敬礼。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qzone.png">
          
        </a>
      
    
      
        <a class="-mob-share-weibo" title="微博" rel="external nofollow noopener noreferrer"
          
          href="http://service.weibo.com/share/share.php?url=https://lucifer.ren/blog/2019/12/11/draft/&title=《LeetCode题解攻略》 - 草稿目录 | lucifer的网络博客&pics=https://avatars0.githubusercontent.com/u/12479470?s=400&u=442571e44cbd0b67e3503e9551d4445c78f593f8&v=4&summary=这个我为自己的新书写的一个目录，计划在一星期左右定下来大体目录，然后投入完善，希望大家多提意见，你的意见很可能会影响到这本书的内容，期待你以特别的方式参与进来，此致敬礼。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/weibo.png">
          
        </a>
      
    
  </div>
</div>



        
      
    </div>
  </section>


      
      
          <div class="prev-next">
              
                  <section class="prev">
                      <span class="art-item-left">
                          <h6><i class="fas fa-chevron-left" aria-hidden="true"></i>&nbsp;上一页</h6>
                          <h4>
                              <a href="/blog/2019/12/11/daily-featured-2019-11/" rel="prev" title="每日一荐 2019-11 汇总">
                                
                                    每日一荐 2019-11 汇总
                                
                              </a>
                          </h4>
                          
                              
                              <h6 class="tags">
                                  <a class="tag" href="/blog/tags/每日一荐/"><i class="fas fa-tag fa-fw" aria-hidden="true"></i> 每日一荐</a>
                              </h6>
                          
                      </span>
                  </section>
              
              
                  <section class="next">
                      <span class="art-item-right" aria-hidden="true">
                          <h6>下一页&nbsp;<i class="fas fa-chevron-right" aria-hidden="true"></i></h6>
                          <h4>
                              <a href="/blog/2019/12/11/event-loop/" rel="prev" title="《一文看懂浏览器事件循环》">
                                  
                                      《一文看懂浏览器事件循环》
                                  
                              </a>
                          </h4>
                          
                              
                              <h6 class="tags">
                                  <a class="tag" href="/blog/tags/前端/"><i class="fas fa-tag fa-fw" aria-hidden="true"></i> 前端</a> <a class="tag" href="/blog/tags/浏览器/"><i class="fas fa-tag fa-fw" aria-hidden="true"></i> 浏览器</a> <a class="tag" href="/blog/tags/事件循环/"><i class="fas fa-tag fa-fw" aria-hidden="true"></i> 事件循环</a>
                              </h6>
                          
                      </span>
                  </section>
              
          </div>
      
    </section>
  </article>



  <!-- 显示推荐文章和评论 -->



  <article class="post white-box comments">
    <section class="article typo">
      <h4><i class="fas fa-comments fa-fw" aria-hidden="true"></i>&nbsp;评论</h4>
      
      
      
        <section id="comments">
          <div id="gitalk-container"></div>
        </section>
      
      
    </section>
  </article>






<!-- 根据页面mathjax变量决定是否加载MathJax数学公式js -->



  <script>
    window.subData = {
      title: '《LeetCode题解攻略》 - 草稿目录',
      tools: true
    }
  </script>


</div>
<aside class='l_side'>
  
    
    
      
      
        
          
          
            
              <section class='widget author'>
  <div class='content pure'>
    
    
    
      <div class="social-wrapper">
        
          
            <a href="/blog/atom.xml"
              class="social fas fa-rss flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://www.zhihu.com/people/lu-xiao-13-70/activities"
              class="social fab fa-zhihu flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="mailto:azl397985856@gmail.com"
              class="social fas fa-envelope flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://github.com/azl397985856"
              class="social fab fa-github flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://music.163.com/playlist?id=978545815&userid=632167080"
              class="social fas fa-headphones-alt flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
      </div>
    
  </div>
</section>

            
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
      
        
          
          
        
          
          
            
              
  <section class='widget toc-wrapper'>
    
<header class='pure'>
  <div><i class="fas fa-list fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;本文目录</div>
  
    <!-- <div class='wrapper'><a class="s-toc rightBtn" rel="external nofollow noopener noreferrer" href="javascript:void(0)"><i class="fas fa-thumbtack fa-fw"></i></a></div> -->
  
</header>

    <div class='content pure'>
      <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#1-准备知识"><span class="toc-text">1. 准备知识</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-1-学习这本书之前需要什么基础"><span class="toc-text">1.1 学习这本书之前需要什么基础</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#1-2-基础数据结构和算法"><span class="toc-text">1.2 基础数据结构和算法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#1-3-如何刷LeetCode"><span class="toc-text">1.3 如何刷LeetCode</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#Leetcode网站使用方法"><span class="toc-text">Leetcode网站使用方法</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#应该怎么刷LeetCode"><span class="toc-text">应该怎么刷LeetCode</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#1-4-复杂度分析"><span class="toc-text">1.4 复杂度分析</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#总结"><span class="toc-text">总结</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#2-数学之美"><span class="toc-text">2. 数学之美</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#2-1-N-SUM-题目"><span class="toc-text">2.1 N-SUM 题目</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-2-连续整数和"><span class="toc-text">2.2 连续整数和</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-3-最大数"><span class="toc-text">2.3 最大数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-4-分数到小数"><span class="toc-text">2.4 分数到小数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-5-最大整除子集"><span class="toc-text">2.5 最大整除子集</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-6-质数排列"><span class="toc-text">2.6 质数排列</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-8-快乐数"><span class="toc-text">2.8 快乐数</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-回文的艺术"><span class="toc-text">3. 回文的艺术</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#3-1-回文字符串"><span class="toc-text">3.1 回文字符串</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-2-回文链表"><span class="toc-text">3.2 回文链表</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-3-回文数字"><span class="toc-text">3.3 回文数字</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-4-回文总数"><span class="toc-text">3.4 回文总数</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4-游戏之乐"><span class="toc-text">4. 游戏之乐</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#4-1-生命游戏"><span class="toc-text">4.1 生命游戏</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-报数"><span class="toc-text">4.2 报数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-3-数独游戏"><span class="toc-text">4.3 数独游戏</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#5-BFS-amp-DFS"><span class="toc-text">5. BFS &amp; DFS</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#6-二分法"><span class="toc-text">6. 二分法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#6-1-你真的了解二分法么？"><span class="toc-text">6.1 你真的了解二分法么？</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#6-2-一些显然的二分"><span class="toc-text">6.2 一些显然的二分</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#6-3-隐藏的二分法"><span class="toc-text">6.3 隐藏的二分法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#6-4-寻找峰值"><span class="toc-text">6.4 寻找峰值</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#7-神奇的比特"><span class="toc-text">7. 神奇的比特</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#7-1-那些特立独行的数字"><span class="toc-text">7.1 那些特立独行的数字</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7-2-桶中摸黑白球"><span class="toc-text">7.2 桶中摸黑白球</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7-3-实现加法"><span class="toc-text">7.3 实现加法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7-4-二进制-1-的个数"><span class="toc-text">7.4 二进制 1 的个数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7-5-悲惨的老鼠"><span class="toc-text">7.5 悲惨的老鼠</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#8-设计题"><span class="toc-text">8. 设计题</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#8-1-设计-LRU"><span class="toc-text">8.1 设计 LRU</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#8-2-设计-LFU"><span class="toc-text">8.2 设计 LFU</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#8-3-最小栈"><span class="toc-text">8.3 最小栈</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#8-4-队列实现栈"><span class="toc-text">8.4 队列实现栈</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#8-5-设计-Trie-树"><span class="toc-text">8.5 设计 Trie 树</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#9-双指针"><span class="toc-text">9. 双指针</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#9-1-头尾指针"><span class="toc-text">9.1 头尾指针</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#9-1-1-盛水问题"><span class="toc-text">9.1.1 盛水问题</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#9-1-2-两数相加-2"><span class="toc-text">9.1.2 两数相加 2</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#9-2-快慢指针"><span class="toc-text">9.2 快慢指针</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#9-2-1-删除有序数组的重复元素"><span class="toc-text">9.2.1 删除有序数组的重复元素</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#9-2-2-链表中的快慢指针"><span class="toc-text">9.2.2 链表中的快慢指针</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#10-查表与动态规划"><span class="toc-text">10. 查表与动态规划</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#10-1-爬楼梯"><span class="toc-text">10.1 爬楼梯</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#10-2-聪明的盗贼"><span class="toc-text">10.2 聪明的盗贼</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#10-3-不同路径"><span class="toc-text">10.3 不同路径</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#10-4-硬币找零"><span class="toc-text">10.4 硬币找零</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#10-5-最短编辑距离"><span class="toc-text">10.5 最短编辑距离</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#11-滑动窗口"><span class="toc-text">11. 滑动窗口</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#最长连续不重复子串"><span class="toc-text">最长连续不重复子串</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#最短子数组之和"><span class="toc-text">最短子数组之和</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#滑动窗口最大值"><span class="toc-text">滑动窗口最大值</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#12-博弈"><span class="toc-text">12. 博弈</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#12-1-alec"><span class="toc-text">12.1 alec</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#12-2-Nim"><span class="toc-text">12.2 Nim</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#12-3-486-预测赢家"><span class="toc-text">12.3 486. 预测赢家</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#13-股票系列"><span class="toc-text">13. 股票系列</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#13-1-股票买卖的最佳时机-1"><span class="toc-text">13.1 股票买卖的最佳时机 1</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#13-2-股票买卖的最佳时机-2"><span class="toc-text">13.2 股票买卖的最佳时机 2</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#13-3-股票买卖的最佳时机-3"><span class="toc-text">13.3 股票买卖的最佳时机 3</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#13-4-股票买卖的最佳时机-4"><span class="toc-text">13.4 股票买卖的最佳时机 4</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#14-分治法"><span class="toc-text">14. 分治法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#14-1-合并-K-个排序链表"><span class="toc-text">14.1 合并 K 个排序链表</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#14-2-数组中的第-K-个最大元素"><span class="toc-text">14.2 数组中的第 K 个最大元素</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#14-3-搜索二维矩阵"><span class="toc-text">14.3 搜索二维矩阵</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#15-贪心法"><span class="toc-text">15. 贪心法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#15-1-跳跃游戏"><span class="toc-text">15.1 跳跃游戏</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#15-2-任务调度器"><span class="toc-text">15.2 任务调度器</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#16-回溯"><span class="toc-text">16. 回溯</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#16-1-求组合数-1"><span class="toc-text">16.1 求组合数 1</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#16-2-求组合数-2"><span class="toc-text">16.2 求组合数 2</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#16-3-求所有子集"><span class="toc-text">16.3 求所有子集</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#16-4-全排列"><span class="toc-text">16.4 全排列</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#16-5-海岛问题"><span class="toc-text">16.5 海岛问题</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#17-一些有趣的题目"><span class="toc-text">17. 一些有趣的题目</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#17-1-求众数"><span class="toc-text">17.1 求众数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-2-手撕排序"><span class="toc-text">17.2 手撕排序</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-3-星期几"><span class="toc-text">17.3 星期几</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-4-量筒问题"><span class="toc-text">17.4 量筒问题</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-5-实现开方"><span class="toc-text">17.5 实现开方</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#17-6-4的次方"><span class="toc-text">17.6 4的次方</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#18-一些通用解题模板"><span class="toc-text">18. 一些通用解题模板</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#18-1-二分法"><span class="toc-text">18.1 二分法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#18-2-回溯法"><span class="toc-text">18.2 回溯法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#18-3-递归"><span class="toc-text">18.3 递归</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#18-4-并查集"><span class="toc-text">18.4 并查集</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#19-融会贯通"><span class="toc-text">19. 融会贯通</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#19-1-最大子序列和问题"><span class="toc-text">19.1 最大子序列和问题</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#19-2-循环移位问题"><span class="toc-text">19.2 循环移位问题</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#19-3-k-问题"><span class="toc-text">19.3 k 问题</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#20-解题技巧-amp-面试技巧"><span class="toc-text">20. 解题技巧&amp;面试技巧</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#21-参考"><span class="toc-text">21. 参考</span></a></li></ol>
    </div>
  </section>


            
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
      
        
          
          
        
          
          
        
          
          
            
              <section class='widget grid'>
  
<header class='pure'>
  <div><i class="fas fa-map-signs fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;我的开源项目</div>
  
</header>

  <div class='content pure'>
    <ul class="grid navgation">
      
        <li><a class="flat-box" title="https://github.com/azl397985856/leetcode" href="https://github.com/azl397985856/leetcode"
          
          
          id="https:github.comazl397985856leetcode">
          
            <i class="fab fa-github fa-fw" aria-hidden="true"></i>
          
          LeetCode
        </a></li>
      
        <li><a class="flat-box" title="https://github.com/azl397985856/fe-interview" href="https://github.com/azl397985856/fe-interview"
          
          
          id="https:github.comazl397985856fe-interview">
          
            <i class="fab fa-github fa-fw" aria-hidden="true"></i>
          
          大前端
        </a></li>
      
        <li><a class="flat-box" title="https://github.com/azl397985856/daily-featured" href="https://github.com/azl397985856/daily-featured"
          
          
          id="https:github.comazl397985856daily-featured">
          
            <i class="fab fa-github fa-fw" aria-hidden="true"></i>
          
          每日一荐
        </a></li>
      
    </ul>
  </div>
</section>

            
          
        
          
          
        
          
          
        
          
          
        
          
          
        
      
        
          
          
        
          
          
        
          
          
        
          
          
            
              
  <section class='widget category'>
    
<header class='pure'>
  <div><i class="fas fa-folder-open fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;全部分类</div>
  
    <a class="rightBtn"
    
      rel="external nofollow noopener noreferrer"
    
    
    href="/blog/categories/"
    title="categories/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <ul class="entry">
        
          <li><a class="flat-box" title="/blog/categories/91天学算法/" href="/blog/categories/91天学算法/"><div class='name'>91天学算法</div><div class='badge'>(4)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/Easy/" href="/blog/categories/Easy/"><div class='name'>Easy</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/Hard/" href="/blog/categories/Hard/"><div class='name'>Hard</div><div class='badge'>(3)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/LeetCode/" href="/blog/categories/LeetCode/"><div class='name'>LeetCode</div><div class='badge'>(15)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/LeetCode/LeetCode题解书/" href="/blog/categories/LeetCode/LeetCode题解书/"><div class='name'>LeetCode题解书</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/LeetCode/动态规划/" href="/blog/categories/LeetCode/动态规划/"><div class='name'>动态规划</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/Medium/" href="/blog/categories/Medium/"><div class='name'>Medium</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/React/" href="/blog/categories/React/"><div class='name'>React</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/TypeScript/" href="/blog/categories/TypeScript/"><div class='name'>TypeScript</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/中等/" href="/blog/categories/中等/"><div class='name'>中等</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/书/" href="/blog/categories/书/"><div class='name'>书</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/书/算法/" href="/blog/categories/书/算法/"><div class='name'>算法</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/书摘/" href="/blog/categories/书摘/"><div class='name'>书摘</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/二叉树/" href="/blog/categories/二叉树/"><div class='name'>二叉树</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/前端/" href="/blog/categories/前端/"><div class='name'>前端</div><div class='badge'>(14)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/TypeScript/" href="/blog/categories/前端/TypeScript/"><div class='name'>TypeScript</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/TypeScript/泛型/" href="/blog/categories/前端/TypeScript/泛型/"><div class='name'>泛型</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/eslint/" href="/blog/categories/前端/eslint/"><div class='name'>eslint</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/web-component/" href="/blog/categories/前端/web-component/"><div class='name'>web-component</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/测试/" href="/blog/categories/前端/测试/"><div class='name'>测试</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/浏览器/" href="/blog/categories/前端/浏览器/"><div class='name'>浏览器</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/算法/" href="/blog/categories/前端/算法/"><div class='name'>算法</div><div class='badge'>(4)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/前端/组件化/" href="/blog/categories/前端/组件化/"><div class='name'>组件化</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/力扣加加/" href="/blog/categories/力扣加加/"><div class='name'>力扣加加</div><div class='badge'>(5)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/学习方法/" href="/blog/categories/学习方法/"><div class='name'>学习方法</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/异议！/" href="/blog/categories/异议！/"><div class='name'>异议！</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/技术大会/" href="/blog/categories/技术大会/"><div class='name'>技术大会</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/技术大会/D2/" href="/blog/categories/技术大会/D2/"><div class='name'>D2</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/技术大会/Google-IO/" href="/blog/categories/技术大会/Google-IO/"><div class='name'>Google IO</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/技术大会/JSConf/" href="/blog/categories/技术大会/JSConf/"><div class='name'>JSConf</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/技术大会/QCon/" href="/blog/categories/技术大会/QCon/"><div class='name'>QCon</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/技术大会/React-Conf/" href="/blog/categories/技术大会/React-Conf/"><div class='name'>React Conf</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/数据结构/" href="/blog/categories/数据结构/"><div class='name'>数据结构</div><div class='badge'>(23)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/hashtable/" href="/blog/categories/数据结构/hashtable/"><div class='name'>hashtable</div><div class='badge'>(6)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/二叉搜索树/" href="/blog/categories/数据结构/二叉搜索树/"><div class='name'>二叉搜索树</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/图/" href="/blog/categories/数据结构/图/"><div class='name'>图</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/字符串/" href="/blog/categories/数据结构/字符串/"><div class='name'>字符串</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/平衡二叉树/" href="/blog/categories/数据结构/平衡二叉树/"><div class='name'>平衡二叉树</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/数组/" href="/blog/categories/数据结构/数组/"><div class='name'>数组</div><div class='badge'>(6)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/算法/" href="/blog/categories/数据结构/算法/"><div class='name'>算法</div><div class='badge'>(5)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/数据结构/链表/" href="/blog/categories/数据结构/链表/"><div class='name'>链表</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/数据结构，二叉树/" href="/blog/categories/数据结构，二叉树/"><div class='name'>数据结构，二叉树</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/数据结构，单调栈/" href="/blog/categories/数据结构，单调栈/"><div class='name'>数据结构，单调栈</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/数据结构，字符串/" href="/blog/categories/数据结构，字符串/"><div class='name'>数据结构，字符串</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/数据结构，数组/" href="/blog/categories/数据结构，数组/"><div class='name'>数据结构，数组</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/日记/" href="/blog/categories/日记/"><div class='name'>日记</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/日记/技术/" href="/blog/categories/日记/技术/"><div class='name'>技术</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/每日一荐/" href="/blog/categories/每日一荐/"><div class='name'>每日一荐</div><div class='badge'>(6)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2019-09/" href="/blog/categories/每日一荐/2019-09/"><div class='name'>2019-09</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2019-10/" href="/blog/categories/每日一荐/2019-10/"><div class='name'>2019-10</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2019-11/" href="/blog/categories/每日一荐/2019-11/"><div class='name'>2019-11</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2019-12/" href="/blog/categories/每日一荐/2019-12/"><div class='name'>2019-12</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2020-01/" href="/blog/categories/每日一荐/2020-01/"><div class='name'>2020-01</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/每日一荐/2020-03/" href="/blog/categories/每日一荐/2020-03/"><div class='name'>2020-03</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/浏览器/" href="/blog/categories/浏览器/"><div class='name'>浏览器</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/浏览器/事件/" href="/blog/categories/浏览器/事件/"><div class='name'>事件</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/电影/" href="/blog/categories/电影/"><div class='name'>电影</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/电影/观后感/" href="/blog/categories/电影/观后感/"><div class='name'>观后感</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/算法/" href="/blog/categories/算法/"><div class='name'>算法</div><div class='badge'>(20)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/BFS/" href="/blog/categories/算法/BFS/"><div class='name'>BFS</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/DFS/" href="/blog/categories/算法/DFS/"><div class='name'>DFS</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/二分法/" href="/blog/categories/算法/二分法/"><div class='name'>二分法</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/位运算/" href="/blog/categories/算法/位运算/"><div class='name'>位运算</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/前缀和/" href="/blog/categories/算法/前缀和/"><div class='name'>前缀和</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/动态规划/" href="/blog/categories/算法/动态规划/"><div class='name'>动态规划</div><div class='badge'>(4)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/双指针/" href="/blog/categories/算法/双指针/"><div class='name'>双指针</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/回文/" href="/blog/categories/算法/回文/"><div class='name'>回文</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/回溯/" href="/blog/categories/算法/回溯/"><div class='name'>回溯</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/子序列/" href="/blog/categories/算法/子序列/"><div class='name'>子序列</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/就地算法/" href="/blog/categories/算法/就地算法/"><div class='name'>就地算法</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/布隆过滤器/" href="/blog/categories/算法/布隆过滤器/"><div class='name'>布隆过滤器</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/循环移位/" href="/blog/categories/算法/循环移位/"><div class='name'>循环移位</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/数学/" href="/blog/categories/算法/数学/"><div class='name'>数学</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/概率/" href="/blog/categories/算法/概率/"><div class='name'>概率</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/母题/" href="/blog/categories/算法/母题/"><div class='name'>母题</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/状态压缩/" href="/blog/categories/算法/状态压缩/"><div class='name'>状态压缩</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/背包问题/" href="/blog/categories/算法/背包问题/"><div class='name'>背包问题</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/递归/" href="/blog/categories/算法/递归/"><div class='name'>递归</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box child" title="/blog/categories/算法/链表反转/" href="/blog/categories/算法/链表反转/"><div class='name'>链表反转</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/算法，动态规划/" href="/blog/categories/算法，动态规划/"><div class='name'>算法，动态规划</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/算法，序列化/" href="/blog/categories/算法，序列化/"><div class='name'>算法，序列化</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/算法，滑动窗口/" href="/blog/categories/算法，滑动窗口/"><div class='name'>算法，滑动窗口</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/经验分享/" href="/blog/categories/经验分享/"><div class='name'>经验分享</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/编程之美/" href="/blog/categories/编程之美/"><div class='name'>编程之美</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/解题模板/" href="/blog/categories/解题模板/"><div class='name'>解题模板</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/blog/categories/贪婪/" href="/blog/categories/贪婪/"><div class='name'>贪婪</div><div class='badge'>(1)</div></a></li>
        
      </ul>
    </div>
  </section>


            
          
        
          
          
        
          
          
        
          
          
        
      
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
            
              
  <section class='widget tagcloud'>
    
<header class='pure'>
  <div><i class="fas fa-tags fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;热门标签</div>
  
    <a class="rightBtn"
    
      rel="external nofollow noopener noreferrer"
    
    
    href="/blog/tags/"
    title="tags/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <a href="/blog/tags/91天学算法/" style="font-size: 17px; color: #858585">91天学算法</a> <a href="/blog/tags/BFS/" style="font-size: 14px; color: #999">BFS</a> <a href="/blog/tags/BigPipe/" style="font-size: 14px; color: #999">BigPipe</a> <a href="/blog/tags/Canvas/" style="font-size: 14px; color: #999">Canvas</a> <a href="/blog/tags/Chrome/" style="font-size: 14px; color: #999">Chrome</a> <a href="/blog/tags/D2/" style="font-size: 14px; color: #999">D2</a> <a href="/blog/tags/Easy/" style="font-size: 14px; color: #999">Easy</a> <a href="/blog/tags/Floyd-Warshall/" style="font-size: 14px; color: #999">Floyd-Warshall</a> <a href="/blog/tags/Google-IO/" style="font-size: 14px; color: #999">Google IO</a> <a href="/blog/tags/Hard/" style="font-size: 14px; color: #999">Hard</a> <a href="/blog/tags/JSConf/" style="font-size: 14px; color: #999">JSConf</a> <a href="/blog/tags/LeetCode/" style="font-size: 22px; color: #636363">LeetCode</a> <a href="/blog/tags/LeetCode日记/" style="font-size: 20px; color: #707070">LeetCode日记</a> <a href="/blog/tags/Mac/" style="font-size: 14px; color: #999">Mac</a> <a href="/blog/tags/Medium/" style="font-size: 15px; color: #929292">Medium</a> <a href="/blog/tags/PPT/" style="font-size: 14px; color: #999">PPT</a> <a href="/blog/tags/QCon/" style="font-size: 14px; color: #999">QCon</a> <a href="/blog/tags/RFC/" style="font-size: 14px; color: #999">RFC</a> <a href="/blog/tags/React/" style="font-size: 14px; color: #999">React</a> <a href="/blog/tags/TypeScript/" style="font-size: 16px; color: #8b8b8b">TypeScript</a> <a href="/blog/tags/eslint/" style="font-size: 14px; color: #999">eslint</a> <a href="/blog/tags/immutable/" style="font-size: 14px; color: #999">immutable</a> <a href="/blog/tags/immutablejs/" style="font-size: 14px; color: #999">immutablejs</a> <a href="/blog/tags/vue/" style="font-size: 14px; color: #999">vue</a> <a href="/blog/tags/web-component/" style="font-size: 14px; color: #999">web-component</a> <a href="/blog/tags/中等/" style="font-size: 14px; color: #999">中等</a> <a href="/blog/tags/书/" style="font-size: 14px; color: #999">书</a> <a href="/blog/tags/书摘/" style="font-size: 14px; color: #999">书摘</a> <a href="/blog/tags/事件/" style="font-size: 14px; color: #999">事件</a> <a href="/blog/tags/事件循环/" style="font-size: 14px; color: #999">事件循环</a> <a href="/blog/tags/二叉树/" style="font-size: 16px; color: #8b8b8b">二叉树</a> <a href="/blog/tags/位运算/" style="font-size: 14px; color: #999">位运算</a> <a href="/blog/tags/删除-k-个字符/" style="font-size: 14px; color: #999">删除 k 个字符</a> <a href="/blog/tags/前端/" style="font-size: 21px; color: #696969">前端</a> <a href="/blog/tags/前缀和/" style="font-size: 15px; color: #929292">前缀和</a> <a href="/blog/tags/前缀表达式/" style="font-size: 14px; color: #999">前缀表达式</a> <a href="/blog/tags/力扣加加/" style="font-size: 18px; color: #7e7e7e">力扣加加</a> <a href="/blog/tags/动态规划/" style="font-size: 18px; color: #7e7e7e">动态规划</a> <a href="/blog/tags/单元测试/" style="font-size: 14px; color: #999">单元测试</a> <a href="/blog/tags/困难/" style="font-size: 14px; color: #999">困难</a> <a href="/blog/tags/图/" style="font-size: 14px; color: #999">图</a> <a href="/blog/tags/图片处理/" style="font-size: 14px; color: #999">图片处理</a> <a href="/blog/tags/字符串/" style="font-size: 14px; color: #999">字符串</a> <a href="/blog/tags/字节跳动/" style="font-size: 14px; color: #999">字节跳动</a> <a href="/blog/tags/学习方法/" style="font-size: 15px; color: #929292">学习方法</a> <a href="/blog/tags/序列化/" style="font-size: 14px; color: #999">序列化</a> <a href="/blog/tags/异常处理/" style="font-size: 14px; color: #999">异常处理</a> <a href="/blog/tags/异议！/" style="font-size: 14px; color: #999">异议！</a> <a href="/blog/tags/循环移位/" style="font-size: 14px; color: #999">循环移位</a> <a href="/blog/tags/微前端/" style="font-size: 14px; color: #999">微前端</a> <a href="/blog/tags/必备软件/" style="font-size: 14px; color: #999">必备软件</a> <a href="/blog/tags/我的书/" style="font-size: 14px; color: #999">我的书</a> <a href="/blog/tags/扩展程序/" style="font-size: 14px; color: #999">扩展程序</a> <a href="/blog/tags/技术大会/" style="font-size: 14px; color: #999">技术大会</a> <a href="/blog/tags/技术调研/" style="font-size: 14px; color: #999">技术调研</a> <a href="/blog/tags/技能/" style="font-size: 14px; color: #999">技能</a> <a href="/blog/tags/数学/" style="font-size: 15px; color: #929292">数学</a> <a href="/blog/tags/数据结构/" style="font-size: 23px; color: #5c5c5c">数据结构</a> <a href="/blog/tags/数据结构，算法，LeetCode-日记，Hard/" style="font-size: 15px; color: #929292">数据结构，算法，LeetCode 日记，Hard</a> <a href="/blog/tags/数据结构，算法，LeetCode-日记，中等/" style="font-size: 14px; color: #999">数据结构，算法，LeetCode 日记，中等</a> <a href="/blog/tags/数组/" style="font-size: 15px; color: #929292">数组</a> <a href="/blog/tags/日记/" style="font-size: 15px; color: #929292">日记</a> <a href="/blog/tags/最长上升子序列/" style="font-size: 14px; color: #999">最长上升子序列</a> <a href="/blog/tags/最长公共子序列/" style="font-size: 14px; color: #999">最长公共子序列</a> <a href="/blog/tags/概率/" style="font-size: 14px; color: #999">概率</a> <a href="/blog/tags/母题/" style="font-size: 14px; color: #999">母题</a> <a href="/blog/tags/每日一荐/" style="font-size: 19px; color: #777">每日一荐</a> <a href="/blog/tags/泛型/" style="font-size: 15px; color: #929292">泛型</a> <a href="/blog/tags/测试/" style="font-size: 14px; color: #999">测试</a> <a href="/blog/tags/浏览器/" style="font-size: 15px; color: #929292">浏览器</a> <a href="/blog/tags/滑动窗口/" style="font-size: 15px; color: #929292">滑动窗口</a> <a href="/blog/tags/滤镜/" style="font-size: 14px; color: #999">滤镜</a> <a href="/blog/tags/状态压缩/" style="font-size: 14px; color: #999">状态压缩</a> <a href="/blog/tags/状态机/" style="font-size: 14px; color: #999">状态机</a> <a href="/blog/tags/电影/" style="font-size: 15px; color: #929292">电影</a> <a href="/blog/tags/监控/" style="font-size: 14px; color: #999">监控</a> <a href="/blog/tags/算法/" style="font-size: 24px; color: #555">算法</a> <a href="/blog/tags/算法提高班/" style="font-size: 18px; color: #7e7e7e">算法提高班</a> <a href="/blog/tags/算法系列/" style="font-size: 17px; color: #858585">算法系列</a> <a href="/blog/tags/组件化/" style="font-size: 14px; color: #999">组件化</a> <a href="/blog/tags/经验分享/" style="font-size: 15px; color: #929292">经验分享</a> <a href="/blog/tags/编程之美/" style="font-size: 14px; color: #999">编程之美</a> <a href="/blog/tags/草稿/" style="font-size: 14px; color: #999">草稿</a> <a href="/blog/tags/装机/" style="font-size: 14px; color: #999">装机</a> <a href="/blog/tags/解题模板/" style="font-size: 14px; color: #999">解题模板</a> <a href="/blog/tags/贪婪/" style="font-size: 14px; color: #999">贪婪</a> <a href="/blog/tags/贪心/" style="font-size: 14px; color: #999">贪心</a> <a href="/blog/tags/递归/" style="font-size: 14px; color: #999">递归</a> <a href="/blog/tags/链表/" style="font-size: 15px; color: #929292">链表</a> <a href="/blog/tags/陷阱题/" style="font-size: 14px; color: #999">陷阱题</a>
    </div>
  </section>


            
          
        
          
          
        
          
          
        
      
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
            
              <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-thumbs-up fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;强烈推荐</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://xaoxuu.com/wiki/hexo.sh/" href="https://xaoxuu.com/wiki/hexo.sh/"
          
          
          >
          <div class='name'>
            
              <i class=" fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Hexo脚本（Mac）
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://xaoxuu.com/wiki/vim-cn.sh/" href="https://xaoxuu.com/wiki/vim-cn.sh/"
          
          
          >
          <div class='name'>
            
              <i class=" fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;图床脚本（Mac）
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://yasuotu.com" href="https://yasuotu.com"
          
          
          >
          <div class='name'>
            
              <i class=" fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;图片在线压缩
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://realfavicongenerator.net" href="https://realfavicongenerator.net"
          
          
          >
          <div class='name'>
            
              <i class=" fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;生成Favicon
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://mxclub.github.io/resume/" href="https://mxclub.github.io/resume/"
          
          
          >
          <div class='name'>
            
              <i class=" fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;简历主题
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

            
          
        
      
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
          
          
        
      
    

  
</aside>

<footer id="footer" class="clearfix">
   
  <div class="social-wrapper">
     
    <a
      href="/blog/atom.xml"
      class="social fas fa-rss flat-btn"
      target="_blank"
      rel="external nofollow noopener noreferrer"
    >
    </a>
      
    <a
      href="https://www.zhihu.com/people/lu-xiao-13-70/activities"
      class="social fab fa-zhihu flat-btn"
      target="_blank"
      rel="external nofollow noopener noreferrer"
    >
    </a>
      
    <a
      href="mailto:azl397985856@gmail.com"
      class="social fas fa-envelope flat-btn"
      target="_blank"
      rel="external nofollow noopener noreferrer"
    >
    </a>
      
    <a
      href="https://github.com/azl397985856"
      class="social fab fa-github flat-btn"
      target="_blank"
      rel="external nofollow noopener noreferrer"
    >
    </a>
      
    <a
      href="https://music.163.com/playlist?id=978545815&amp;userid=632167080"
      class="social fas fa-headphones-alt flat-btn"
      target="_blank"
      rel="external nofollow noopener noreferrer"
    >
    </a>
     
  </div>
  
  <br />
  <div><p>博客内容遵循 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议</a></p>
</div>
  <div>
    本站使用
    <a href="https://xaoxuu.com/wiki/material-x/" target="_blank" class="codename"
      >Material X</a
    >
    作为主题  ， 总访问量为
    <span id="busuanzi_value_site_pv"
      ><i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i
    ></span>
    次  。
  </div>

  <span id="timeDate">载入天数...</span><span id="times">载入时分秒...</span>
  <script>
    var now = new Date();
    function createtime() {
      var grt = new Date("08/10/2018 17:38:00"); //在此处修改你的建站时间，格式：月/日/年 时:分:秒
      now.setTime(now.getTime() + 250);
      days = (now - grt) / 1000 / 60 / 60 / 24;
      dnum = Math.floor(days);
      hours = (now - grt) / 1000 / 60 / 60 - 24 * dnum;
      hnum = Math.floor(hours);
      if (String(hnum).length == 1) {
        hnum = "0" + hnum;
      }
      minutes = (now - grt) / 1000 / 60 - 24 * 60 * dnum - 60 * hnum;
      mnum = Math.floor(minutes);
      if (String(mnum).length == 1) {
        mnum = "0" + mnum;
      }
      seconds =
        (now - grt) / 1000 - 24 * 60 * 60 * dnum - 60 * 60 * hnum - 60 * mnum;
      snum = Math.round(seconds);
      if (String(snum).length == 1) {
        snum = "0" + snum;
      }
      document.getElementById("timeDate").innerHTML =
        "本站已安全运行 " + dnum + " 天 ";
      document.getElementById("times").innerHTML =
        hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
    }
    setInterval("createtime()", 250);
  </script>
</footer>
<script>
  setLoadingBarProgress(80);
</script>


      <script>setLoadingBarProgress(60);</script>
    </div>
    <a class="s-top fas fa-arrow-up fa-fw" href='javascript:void(0)'></a>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>

  <script>
    var GOOGLE_CUSTOM_SEARCH_API_KEY = "";
    var GOOGLE_CUSTOM_SEARCH_ENGINE_ID = "";
    var ALGOLIA_API_KEY = "";
    var ALGOLIA_APP_ID = "";
    var ALGOLIA_INDEX_NAME = "";
    var AZURE_SERVICE_NAME = "";
    var AZURE_INDEX_NAME = "";
    var AZURE_QUERY_KEY = "";
    var BAIDU_API_ID = "";
    var SEARCH_SERVICE = "hexo" || "hexo";
    var ROOT = "/blog/"||"/";
    if(!ROOT.endsWith('/'))ROOT += '/';
  </script>

<script src="//instant.page/1.2.2" type="module" integrity="sha384-2xV8M5griQmzyiY3CDqh1dn4z3llDVqZDqzjzcY+jCBCk/a5fXJmuZ/40JJAPeoU"></script>


  <script async src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.5/dist/scrollreveal.min.js"></script>
  <script type="text/javascript">
    $(function() {
      const $reveal = $('.reveal');
      if ($reveal.length === 0) return;
      const sr = ScrollReveal({ distance: 0 });
      sr.reveal('.reveal');
    });
  </script>


  <script src="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js"></script>
  <script type="text/javascript">
    $(function() {
      Waves.attach('.flat-btn', ['waves-button']);
      Waves.attach('.float-btn', ['waves-button', 'waves-float']);
      Waves.attach('.float-btn-light', ['waves-button', 'waves-float', 'waves-light']);
      Waves.attach('.flat-box', ['waves-block']);
      Waves.attach('.float-box', ['waves-block', 'waves-float']);
      Waves.attach('.waves-image');
      Waves.init();
    });
  </script>


  <script async src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js"></script>




  
  
  
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-backstretch/2.0.4/jquery.backstretch.min.js"></script>
    <script type="text/javascript">
      $(function(){
        if ('.cover') {
          $('.cover').backstretch(
          ["https://img.vim-cn.com/29/91197b04c13f512f734a76d4ac422d89dbe229.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        } else {
          $.backstretch(
          ["https://img.vim-cn.com/29/91197b04c13f512f734a76d4ac422d89dbe229.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        }
      });
    </script>
  







  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
  <script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: "aea1377036afe4cd0343",
      clientSecret: "815c638dea8644b7a4b97905707cf72b45555f6d",
      repo: "blog",
      owner: "azl397985856",
      admin: "azl397985856",
      
        id: location.pathname,      // Ensure uniqueness and length less than 50
      
      distractionFreeMode: false  // Facebook-like distraction free mode
    });
    gitalk.render('gitalk-container');
  </script>





  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.9/js/app.js"></script>


  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.9/js/search.js"></script>




<!-- 复制 -->
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
  let COPY_SUCCESS = "复制成功";
  let COPY_FAILURE = "复制失败";
  /*页面载入完成后，创建复制按钮*/
  !function (e, t, a) {
    /* code */
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '  <i class="fa fa-copy"></i><span>复制</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });

      clipboard.on('success', function(e) {
        //您可以加入成功提示
        console.info('Action:', e.action);
        console.info('Text:', e.text);
        console.info('Trigger:', e.trigger);
        success_prompt(COPY_SUCCESS);
        e.clearSelection();
      });
      clipboard.on('error', function(e) {
        //您可以加入失败提示
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
        fail_prompt(COPY_FAILURE);
      });
    }
    initCopyCode();

  }(window, document);

  /**
   * 弹出式提示框，默认1.5秒自动消失
   * @param message 提示信息
   * @param style 提示样式，有alert-success、alert-danger、alert-warning、alert-info
   * @param time 消失时间
   */
  var prompt = function (message, style, time)
  {
      style = (style === undefined) ? 'alert-success' : style;
      time = (time === undefined) ? 1500 : time*1000;
      $('<div>')
          .appendTo('body')
          .addClass('alert ' + style)
          .html(message)
          .show()
          .delay(time)
          .fadeOut();
  };

  // 成功提示
  var success_prompt = function(message, time)
  {
      prompt(message, 'alert-success', time);
  };

  // 失败提示
  var fail_prompt = function(message, time)
  {
      prompt(message, 'alert-danger', time);
  };

  // 提醒
  var warning_prompt = function(message, time)
  {
      prompt(message, 'alert-warning', time);
  };

  // 信息提示
  var info_prompt = function(message, time)
  {
      prompt(message, 'alert-info', time);
  };

</script>


<!-- fancybox -->
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script>
  let LAZY_LOAD_IMAGE = "";
  $(".article-entry").find("fancybox").find("img").each(function () {
      var element = document.createElement("a");
      $(element).attr("data-fancybox", "gallery");
      $(element).attr("href", $(this).attr("src"));
      /* 图片采用懒加载处理时,
       * 一般图片标签内会有个属性名来存放图片的真实地址，比如 data-original,
       * 那么此处将原本的属性名src替换为对应属性名data-original,
       * 修改如下
       */
       if (LAZY_LOAD_IMAGE) {
         $(element).attr("href", $(this).attr("data-original"));
       }
      $(this).wrap(element);
  });
</script>





  <script>setLoadingBarProgress(100);</script>
  <!-- <script src="https://my.openwrite.cn/js/readmore.js" type="text/javascript"></script>
  <script>
      const btw = new BTWPlugin();
      btw.init({
          id: 'container',
          blogId: '17446-1571644985832-648',
          name: '脑洞前端',
          qrcode: 'https://lucifer-1259702774.cos.ap-shanghai.myqcloud.com/2019-09-19-085421.jpg',
          keyword: 'more',
      });
  </script> -->
</body>
</html>
